home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 January: Mac OS SDK / Dev.CD Jan 97 SDK2.toast / Development Kits (Disc 2) / OpenDoc Development Framework / ODF-Interest Archive / July 96 / Destroying Proxy Frames < prev    next >
Encoding:
Internet Message Format  |  1996-07-09  |  2.1 KB  |  [TEXT/ttxt]

  1. Subject:     Destroying Proxy Frames
  2. Sent:        7/8/96 1:27 PM
  3. Received:    7/8/96 12:41 PM
  4. From:        Scott Anderson, scotta@aw.com
  5. Reply-To:    ODF Interest, ODF-Interest@CILabs.ORG
  6. To:          OpenDoc Development Framework Discussion List, ODF-Interest@CILabs.
  7.  
  8.  
  9. When a FW_CProxyFrame is destroyed should its fEmbeddedFrame be removed 
  10. or should it be released if that frame has been detached (fAttached = 
  11. FALSE)?  Currently my part crashes when the fEmbeddedFrame has been 
  12. detached and is removed in CProxyFrame's destructor...
  13.  
  14. -------------------------------------------
  15.  
  16. FW_CProxyFrame::~FW_CProxyFrame()
  17. {
  18.     // [HLX] Need a try block
  19.     if (fEmbeddedFrame)
  20.     {
  21.         Environment* ev = somGetGlobalEnvironment();
  22.         if (FW_IsInLimbo(ev, fEmbeddedFrame))    // [HLX] do not call 
  23. ODFrame::IsInLimbo. see FW_IsInLimbo
  24.         {
  25.             // If the embedded frame doesn't have fContainingFrameID as containing 
  26. frame then 
  27.             // doesn't remove
  28.             FW_CAcquiredODFrame embeddingFrame = 
  29. fEmbeddedFrame->AcquireContainingFrame(ev);
  30.             if (embeddingFrame == NULL || embeddingFrame->GetID(ev) == 
  31. fContainingFrameID)
  32.                 fEmbeddedFrame->Remove(ev);
  33.             else
  34.                 fEmbeddedFrame->Release(ev);
  35.         }
  36.         else
  37.             fEmbeddedFrame->Release(ev);
  38.     }
  39. }
  40.  
  41. -------------------------------------------
  42.  
  43. When I check if the proxy has been detached and release the frame instead...
  44.  
  45. -------------------------------------------
  46.  
  47. FW_CProxyFrame::~FW_CProxyFrame()
  48. {
  49.     // [HLX] Need a try block
  50.     if (fEmbeddedFrame)
  51.     {
  52.         Environment* ev = somGetGlobalEnvironment();
  53.         if (fAttached && FW_IsInLimbo(ev, fEmbeddedFrame))    // <<------ Changed 
  54. Line --------
  55.         {
  56.             // If the embedded frame doesn't have fContainingFrameID as containing 
  57. frame then 
  58.             // doesn't remove
  59.             FW_CAcquiredODFrame embeddingFrame = 
  60. fEmbeddedFrame->AcquireContainingFrame(ev);
  61.             if (embeddingFrame == NULL || embeddingFrame->GetID(ev) == 
  62. fContainingFrameID)
  63.                 fEmbeddedFrame->Remove(ev);
  64.             else
  65.                 fEmbeddedFrame->Release(ev);
  66.         }
  67.         else
  68.             fEmbeddedFrame->Release(ev);
  69.     }
  70. }
  71.  
  72. -------------------------------------------
  73.  
  74. ..everything works fine.
  75.  
  76. What should be happening here?
  77.  
  78. -Scott
  79.